Introduction
The following analysis looks at the combined data set created that
includes information from income per person, life expectancy, countries
total, and population information. This analysis looks only at the
values in the year 2015 and an interactive scatter plot was created to
show the relationship between life expectancy and income, as well as
give some additional information on each point in the plot.
Data Preparation
Importing the data:
completed_data<-read.csv(url("https://melaniemiller1.github.io/STA533/w05-HW/final_data.csv"))
Subsetting the data to only the year 2015:
data2015 <- completed_data %>%
filter(Year == 2015)
Interactive Scatter
Plot of Expectancy vs Income
plot_ly(
data = data2015,
x = ~Expectancy, # Horizontal axis
y = ~Income, # Vertical axis
color = ~factor(region), # must be a numeric factor
text = ~paste("Population: ", Population,
"<br>Country: ", region),
## using the following hovertemplate() to add the information of the
## Two numerical variables to the hover text.
### Use the following hover template to display more information
hovertemplate = paste('<b>%{text}</b>'),
alpha = 0.6,
marker = list(size = ~Population/30000000, sizeref = .05, sizemode = 'area' ),
type = "scatter",
mode = "markers",
## graphic size
width = 700,
height = 500
) %>%
layout(
### Title
title =list(text = "Income vs Life Expectancy",
font = list(family = "Times New Roman", # HTML font family
size = 18,
color = "black")),
### legend
legend = list(title = list(text = "Region",
font = list(family = "Courier New",
size = 14,
color = "green")),
bgcolor = "ivory",
groupclick = "togglegroup", # one of "toggleitem" AND "togglegroup".
orientation = "v" # Sets the orientation of the legend.
),
## margin of the plot
margin = list(
b = 100,
l = 100,
t = 100,
r = 50
),
## Background
plot_bgcolor ='#f7f7f7',
## Axes labels
xaxis = list(
title=list(text = "Expectancy",
font = list(family = 'Arial')),
zerolinewidth = 2,
gridcolor = 'white'),
yaxis = list(
title=list(text = "Income",
font = list(family = 'Arial')),
zerolinewidth = 2,
gridcolor = 'white')
)
This plot shows the relationship between expectancy and income. The
size of the points are reflective of the population size, and the colors
correspond to the different countries. Hovering over each point you will
be able to see the country and the population size.Trends show that as
expectancy increases, so does income.
Animated Scatter Plot
(optional)
pal.IBM <- c("#332288", "#117733", "#0072B2","#D55E00", "#882255")
pal.IBM <- setNames(pal.IBM, c("Asia", "Europe", "Africa", "Americas", "Oceania"))
df <- completed_data
fig <- df %>%
plot_ly(
x = ~Expectancy,
y = ~Income,
size = ~Population,
color = ~region,
colors = pal.IBM, # custom colors
#marker = list(size = ~(log(pop)-10), sizemode = 'area'),
frame = ~Year, # the time variable to
# to display in the hover
text = ~paste("Country:", region,
"<br>Pop:", Population),
hoverinfo = "text",
type = 'scatter',
mode = 'markers'
)%>%
layout(
### Title
title =list(text = "Income vs Life Expectancy",
font = list(family = "Times New Roman", # HTML font family
size = 18,
color = "black")),
### legend
legend = list(title = list(text = "Region",
font = list(family = "Courier New",
size = 14,
color = "green")),
bgcolor = "ivory",
groupclick = "togglegroup", # one of "toggleitem" AND "togglegroup".
orientation = "v" # Sets the orientation of the legend.
),
## Background
plot_bgcolor ='#f7f7f7',
## Axes labels
xaxis = list(
title=list(text = "Expectancy",
font = list(family = 'Arial')),
zerolinewidth = 2,
gridcolor = 'white'),
yaxis = list(
title=list(text = "Income",
font = list(family = 'Arial')),
zerolinewidth = 2,
gridcolor = 'white'))
fig
This animated plot shows the changes of the relationship bewteen
income and life expectancy over time. This plot shows the trend of as
the years go by, life expectancy eventually begins to increase, as well
as income.
LS0tDQp0aXRsZTogIlNUQSA1MzMgSG9tZXdvcmsgNiINCmF1dGhvcjogIk1lbGFuaWUgTWlsbGVyIg0KZGF0ZTogIldlc3QgQ2hlc3RlciBVbml2ZXJzaXR5Ig0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0b2NfY29sbGFwc2VkOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlDQogICAgdGhlbWU6IGx1bWVuDQplZGl0b3Jfb3B0aW9uczoNCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQ0KLS0tDQoNCg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCg0KLyogVGFibGUgb2YgY29udGVudCAtIG5hdmlnYXRpb24gKi8NCmRpdiNUT0MgbGkgew0KICAgIGxpc3Qtc3R5bGU6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOmxpZ2h0Z3JheTsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7DQogICAgYmFja2dyb3VuZC1yZXBlYXQ6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7DQogICAgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7DQogICAgY29sb3I6ICM3ODBjMGM7DQp9DQoNCg0KLyogVGl0bGUgZm9udHMgKi8NCmgxLnRpdGxlIHsNCiAgZm9udC1zaXplOiAyNHB4Ow0KICBjb2xvcjogZGFya2JsdWU7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7DQogIGZvbnQtdmFyaWFudC1jYXBzOiBub3JtYWw7DQp9DQpoNC5hdXRob3IgeyANCiAgZm9udC1zaXplOiAxOHB4Ow0KICBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsNCiAgY29sb3I6IG5hdnk7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCmg0LmRhdGUgeyANCiAgZm9udC1zaXplOiAxOHB4Ow0KICBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsNCiAgY29sb3I6IGRhcmtibHVlOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCi8qIFNlY3Rpb24gaGVhZGVycyAqLw0KaDEgew0KICAgIGZvbnQtc2l6ZTogMjJweDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQpoMiB7DQogICAgZm9udC1zaXplOiAxOHB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBuYXZ5Ow0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCmgzIHsgDQogICAgZm9udC1zaXplOiAxNXB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCmg0IHsNCiAgICBmb250LXNpemU6IDE4cHg7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IGRhcmtyZWQ7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCjwvc3R5bGU+DQoNCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQojIGNvZGUgY2h1bmsgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIFIgY29kZSwgd2FybmluZ3MsIGFuZCBvdXRwdXQgDQojIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dCBmaWxlcy4NCmlmICghcmVxdWlyZSgidGlkeXZlcnNlIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIpDQogICBsaWJyYXJ5KHRpZHl2ZXJzZSkNCn0NCmlmICghcmVxdWlyZSgia25pdHIiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygia25pdHIiKQ0KICAgbGlicmFyeShrbml0cikNCn0NCmlmICghcmVxdWlyZSgianBlZyIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJqcGVnIiwgZGVwZW5kZW5jaWVzID0gVFJVRSkNCiAgIGxpYnJhcnkoanBlZykNCn0NCg0KaWYgKCFyZXF1aXJlKCJSQ3VybCIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJSQ3VybCIsIGRlcGVuZGVuY2llcyA9IFRSVUUpDQogICBsaWJyYXJ5KFJDdXJsKQ0KfQ0KDQppZiAoIXJlcXVpcmUoInBsb3RseSIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJwbG90bHkiLCBkZXBlbmRlbmNpZXMgPSBUUlVFKQ0KICAgbGlicmFyeShwbG90bHkpDQp9DQoNCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAgIA0KICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRSVUUsICAgDQogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBOQSkNCmBgYA0KDQojIEludHJvZHVjdGlvbg0KVGhlIGZvbGxvd2luZyBhbmFseXNpcyBsb29rcyBhdCB0aGUgY29tYmluZWQgZGF0YSBzZXQgY3JlYXRlZCB0aGF0IGluY2x1ZGVzIGluZm9ybWF0aW9uIGZyb20gaW5jb21lIHBlciBwZXJzb24sIGxpZmUgZXhwZWN0YW5jeSwgY291bnRyaWVzIHRvdGFsLCBhbmQgcG9wdWxhdGlvbiBpbmZvcm1hdGlvbi4gVGhpcyBhbmFseXNpcyBsb29rcyBvbmx5IGF0IHRoZSB2YWx1ZXMgaW4gdGhlIHllYXIgMjAxNSBhbmQgYW4gaW50ZXJhY3RpdmUgc2NhdHRlciBwbG90IHdhcyBjcmVhdGVkIHRvIHNob3cgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGxpZmUgZXhwZWN0YW5jeSBhbmQgaW5jb21lLCBhcyB3ZWxsIGFzIGdpdmUgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGVhY2ggcG9pbnQgaW4gdGhlIHBsb3QuIA0KDQoNCiMgRGF0YSBQcmVwYXJhdGlvbg0KDQpJbXBvcnRpbmcgdGhlIGRhdGE6DQpgYGB7ciBEYXRhIEltcG9ydH0NCmNvbXBsZXRlZF9kYXRhPC1yZWFkLmNzdih1cmwoImh0dHBzOi8vbWVsYW5pZW1pbGxlcjEuZ2l0aHViLmlvL1NUQTUzMy93MDUtSFcvZmluYWxfZGF0YS5jc3YiKSkNCmBgYA0KDQoNClN1YnNldHRpbmcgdGhlIGRhdGEgdG8gb25seSB0aGUgeWVhciAyMDE1Og0KYGBge3J9DQpkYXRhMjAxNSA8LSBjb21wbGV0ZWRfZGF0YSAlPiUNCiAgICAgICAgICAgICBmaWx0ZXIoWWVhciA9PSAyMDE1KQ0KYGBgDQoNCg0KIyBJbnRlcmFjdGl2ZSBTY2F0dGVyIFBsb3Qgb2YgRXhwZWN0YW5jeSB2cyBJbmNvbWUNCg0KYGBge3J9DQpwbG90X2x5KA0KICAgIGRhdGEgPSBkYXRhMjAxNSwNCiAgICB4ID0gfkV4cGVjdGFuY3ksICAjIEhvcml6b250YWwgYXhpcyANCiAgICB5ID0gfkluY29tZSwgICAjIFZlcnRpY2FsIGF4aXMgDQogICAgY29sb3IgPSB+ZmFjdG9yKHJlZ2lvbiksICAjIG11c3QgYmUgYSBudW1lcmljIGZhY3Rvcg0KICAgIHRleHQgPSB+cGFzdGUoIlBvcHVsYXRpb246ICIsIFBvcHVsYXRpb24sDQogICAgICAgICAgICAgICAgICAgIjxicj5Db3VudHJ5OiAiLCByZWdpb24pLCANCiAgICAgIyMgdXNpbmcgdGhlIGZvbGxvd2luZyBob3ZlcnRlbXBsYXRlKCkgdG8gYWRkIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUNCiAgICAgIyMgVHdvIG51bWVyaWNhbCB2YXJpYWJsZXMgdG8gdGhlIGhvdmVyIHRleHQuDQogICAgICMjIyBVc2UgdGhlIGZvbGxvd2luZyBob3ZlciB0ZW1wbGF0ZSB0byBkaXNwbGF5IG1vcmUgaW5mb3JtYXRpb24NCiAgICAgaG92ZXJ0ZW1wbGF0ZSA9IHBhc3RlKCc8Yj4le3RleHR9PC9iPicpLA0KICAgICBhbHBoYSAgPSAwLjYsDQogICAgIG1hcmtlciA9IGxpc3Qoc2l6ZSA9IH5Qb3B1bGF0aW9uLzMwMDAwMDAwLCBzaXplcmVmID0gLjA1LCBzaXplbW9kZSA9ICdhcmVhJyApLA0KICAgICB0eXBlID0gInNjYXR0ZXIiLA0KICAgICBtb2RlID0gIm1hcmtlcnMiLA0KICAgICAjIyBncmFwaGljIHNpemUNCiAgICAgd2lkdGggPSA3MDAsDQogICAgIGhlaWdodCA9IDUwMA0KICAgKSAlPiUNCiAgICBsYXlvdXQoICANCiAgICAgICMjIyBUaXRsZSANCiAgICAgIHRpdGxlID1saXN0KHRleHQgPSAiSW5jb21lIHZzIExpZmUgRXhwZWN0YW5jeSIsIA0KICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3QoZmFtaWx5ID0gIlRpbWVzIE5ldyBSb21hbiIsICAjIEhUTUwgZm9udCBmYW1pbHkgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMTgsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siKSksIA0KICAgICAgIyMjIGxlZ2VuZA0KICAgICAgbGVnZW5kID0gbGlzdCh0aXRsZSA9IGxpc3QodGV4dCA9ICJSZWdpb24iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3QoZmFtaWx5ID0gIkNvdXJpZXIgTmV3IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDE0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImdyZWVuIikpLA0KICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gIml2b3J5IiwNCiAgICAgICAgICAgICAgICAgICAgZ3JvdXBjbGljayA9ICJ0b2dnbGVncm91cCIsICAjIG9uZSBvZiAgInRvZ2dsZWl0ZW0iIEFORCAidG9nZ2xlZ3JvdXAiLg0KICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9ICJ2IiAgIyBTZXRzIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgbGVnZW5kLg0KICAgICAgICAgICAgICAgICAgICApLA0KICAgICAgIyMgbWFyZ2luIG9mIHRoZSBwbG90DQogICAgICBtYXJnaW4gPSBsaXN0KA0KICAgICAgICAgICAgICBiID0gMTAwLA0KICAgICAgICAgICAgICBsID0gMTAwLA0KICAgICAgICAgICAgICB0ID0gMTAwLA0KICAgICAgICAgICAgICByID0gNTANCiAgICAgICksDQogICAgICAjIyBCYWNrZ3JvdW5kDQogICAgICBwbG90X2JnY29sb3IgPScjZjdmN2Y3JywgDQogICAgICAjIyBBeGVzIGxhYmVscw0KICAgICAgICAgICAgIHhheGlzID0gbGlzdCggDQogICAgICAgICAgICAgICAgICAgIHRpdGxlPWxpc3QodGV4dCA9ICJFeHBlY3RhbmN5IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250ID0gbGlzdChmYW1pbHkgPSAnQXJpYWwnKSksDQogICAgICAgICAgICAgICAgICAgIHplcm9saW5ld2lkdGggPSAyLCANCiAgICAgICAgICAgICAgICAgICAgZ3JpZGNvbG9yID0gJ3doaXRlJyksIA0KICAgICAgICAgICAgeWF4aXMgPSBsaXN0KCANCiAgICAgICAgICAgICAgICAgICAgdGl0bGU9bGlzdCh0ZXh0ID0gIkluY29tZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3QoZmFtaWx5ID0gJ0FyaWFsJykpLA0KICAgICAgICAgICAgICAgICAgICB6ZXJvbGluZXdpZHRoID0gMiwgDQogICAgICAgICAgICAgICAgICAgIGdyaWRjb2xvciA9ICd3aGl0ZScpDQoNCiAgICApDQoNCmBgYA0KDQoNClRoaXMgcGxvdCBzaG93cyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZXhwZWN0YW5jeSBhbmQgaW5jb21lLiBUaGUgc2l6ZSBvZiB0aGUgcG9pbnRzIGFyZSByZWZsZWN0aXZlIG9mIHRoZSBwb3B1bGF0aW9uIHNpemUsIGFuZCB0aGUgY29sb3JzIGNvcnJlc3BvbmQgdG8gdGhlIGRpZmZlcmVudCBjb3VudHJpZXMuIEhvdmVyaW5nIG92ZXIgZWFjaCBwb2ludCB5b3Ugd2lsbCBiZSBhYmxlIHRvIHNlZSB0aGUgY291bnRyeSBhbmQgdGhlIHBvcHVsYXRpb24gc2l6ZS5UcmVuZHMgc2hvdyB0aGF0IGFzIGV4cGVjdGFuY3kgaW5jcmVhc2VzLCBzbyBkb2VzIGluY29tZS4gDQoNCg0KIyBBbmltYXRlZCBTY2F0dGVyIFBsb3QgKG9wdGlvbmFsKQ0KYGBge3J9DQpwYWwuSUJNIDwtIGMoIiMzMzIyODgiLCAiIzExNzczMyIsICIjMDA3MkIyIiwiI0Q1NUUwMCIsICIjODgyMjU1IikNCnBhbC5JQk0gPC0gc2V0TmFtZXMocGFsLklCTSwgYygiQXNpYSIsICJFdXJvcGUiLCAiQWZyaWNhIiwgIkFtZXJpY2FzIiwgIk9jZWFuaWEiKSkNCg0KZGYgPC0gY29tcGxldGVkX2RhdGEgDQpmaWcgPC0gZGYgJT4lDQogIHBsb3RfbHkoDQogICAgeCA9IH5FeHBlY3RhbmN5LCANCiAgICB5ID0gfkluY29tZSwgDQogICAgc2l6ZSA9IH5Qb3B1bGF0aW9uLA0KICAgIGNvbG9yID0gfnJlZ2lvbiwgDQogICAgY29sb3JzID0gcGFsLklCTSwgICAjIGN1c3RvbSBjb2xvcnMNCiAgICAjbWFya2VyID0gbGlzdChzaXplID0gfihsb2cocG9wKS0xMCksICBzaXplbW9kZSA9ICdhcmVhJyksDQogICAgZnJhbWUgPSB+WWVhciwgICAgICAjIHRoZSB0aW1lIHZhcmlhYmxlIHRvDQogICAgIyB0byBkaXNwbGF5IGluIHRoZSBob3Zlcg0KICAgIHRleHQgPSB+cGFzdGUoIkNvdW50cnk6IiwgcmVnaW9uLA0KICAgICAgICAgICAgICAgICAgIjxicj5Qb3A6IiwgUG9wdWxhdGlvbiksDQogICAgaG92ZXJpbmZvID0gInRleHQiLA0KICAgIHR5cGUgPSAnc2NhdHRlcicsDQogICAgbW9kZSA9ICdtYXJrZXJzJw0KICApJT4lDQogICAgbGF5b3V0KCAgDQogICAgICAjIyMgVGl0bGUgDQogICAgICB0aXRsZSA9bGlzdCh0ZXh0ID0gIkluY29tZSB2cyBMaWZlIEV4cGVjdGFuY3kiLCANCiAgICAgICAgICAgICAgICAgIGZvbnQgPSBsaXN0KGZhbWlseSA9ICJUaW1lcyBOZXcgUm9tYW4iLCAgIyBIVE1MIGZvbnQgZmFtaWx5ICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDE4LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikpLCANCiAgICAgICMjIyBsZWdlbmQNCiAgICAgIGxlZ2VuZCA9IGxpc3QodGl0bGUgPSBsaXN0KHRleHQgPSAiUmVnaW9uIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBsaXN0KGZhbWlseSA9ICJDb3VyaWVyIE5ldyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAxNCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJncmVlbiIpKSwNCiAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICJpdm9yeSIsDQogICAgICAgICAgICAgICAgICAgIGdyb3VwY2xpY2sgPSAidG9nZ2xlZ3JvdXAiLCAgIyBvbmUgb2YgICJ0b2dnbGVpdGVtIiBBTkQgInRvZ2dsZWdyb3VwIi4NCiAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSAidiIgICMgU2V0cyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGxlZ2VuZC4NCiAgICAgICAgICAgICAgICAgICAgKSwNCiAgICAgICAgICAgIyMgQmFja2dyb3VuZA0KICAgICAgcGxvdF9iZ2NvbG9yID0nI2Y3ZjdmNycsIA0KICAgICAgIyMgQXhlcyBsYWJlbHMNCiAgICAgICAgICAgICB4YXhpcyA9IGxpc3QoIA0KICAgICAgICAgICAgICAgICAgICB0aXRsZT1saXN0KHRleHQgPSAiRXhwZWN0YW5jeSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3QoZmFtaWx5ID0gJ0FyaWFsJykpLA0KICAgICAgICAgICAgICAgICAgICB6ZXJvbGluZXdpZHRoID0gMiwgDQogICAgICAgICAgICAgICAgICAgIGdyaWRjb2xvciA9ICd3aGl0ZScpLCANCiAgICAgICAgICAgIHlheGlzID0gbGlzdCggDQogICAgICAgICAgICAgICAgICAgIHRpdGxlPWxpc3QodGV4dCA9ICJJbmNvbWUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSBsaXN0KGZhbWlseSA9ICdBcmlhbCcpKSwNCiAgICAgICAgICAgICAgICAgICAgemVyb2xpbmV3aWR0aCA9IDIsIA0KICAgICAgICAgICAgICAgICAgICBncmlkY29sb3IgPSAnd2hpdGUnKSkNCg0KZmlnDQpgYGANCg0KVGhpcyBhbmltYXRlZCBwbG90IHNob3dzIHRoZSBjaGFuZ2VzIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV3dGVlbiBpbmNvbWUgYW5kIGxpZmUgZXhwZWN0YW5jeSBvdmVyIHRpbWUuIFRoaXMgcGxvdCBzaG93cyB0aGUgdHJlbmQgb2YgYXMgdGhlIHllYXJzIGdvIGJ5LCBsaWZlIGV4cGVjdGFuY3kgZXZlbnR1YWxseSBiZWdpbnMgdG8gaW5jcmVhc2UsIGFzIHdlbGwgYXMgaW5jb21lLiA=